{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Grove Light-Gesture-Color-Proximity sensor module\n",
    "---"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Aim\n",
    "\n",
    "* This notebook illustrates how to use available APIs for the Grove Light-Gesture-Color-Proximity sensor module on PYNQ-Z2 PMOD and Arduino interfaces.\n",
    "\n",
    "\n",
    "## References\n",
    "* [Grove Light-Gesture-Color-Proximity sensor](https://www.seeedstudio.com/Grove-Light-Color-Proximity-Sensor-TMG39931-p-2879.html)    \n",
    "* [PYNQ Grove Adapter](https://store.digilentinc.com/pynq-grove-system-add-on-board/)   \n",
    "* [Grove Base Shield V2.0](https://www.seeedstudio.com/Base-Shield-V2.html)   \n",
    "\n",
    "## Last revised\n",
    "* 01 April 2021\n",
    "    + Initial version\n",
    "---"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Load _base_ Overlay"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-box alert-info\">\n",
    "Note that we load the base bitstream only once to use Grove module with PYNQ Grove Adapter and SEEED Grove Base Shield V2.0<br>\n",
    "Please make sure you run the following before running either of the interfaces \n",
    "</div>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "\n",
       "try {\n",
       "require(['notebook/js/codecell'], function(codecell) {\n",
       "  codecell.CodeCell.options_default.highlight_modes[\n",
       "      'magic_text/x-csrc'] = {'reg':[/^%%microblaze/]};\n",
       "  Jupyter.notebook.events.one('kernel_ready.Kernel', function(){\n",
       "      Jupyter.notebook.get_cells().map(function(cell){\n",
       "          if (cell.cell_type == 'code'){ cell.auto_highlight(); } }) ;\n",
       "  });\n",
       "});\n",
       "} catch (e) {};\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/javascript": [
       "\n",
       "try {\n",
       "require(['notebook/js/codecell'], function(codecell) {\n",
       "  codecell.CodeCell.options_default.highlight_modes[\n",
       "      'magic_text/x-csrc'] = {'reg':[/^%%pybind11/]};\n",
       "  Jupyter.notebook.events.one('kernel_ready.Kernel', function(){\n",
       "      Jupyter.notebook.get_cells().map(function(cell){\n",
       "          if (cell.cell_type == 'code'){ cell.auto_highlight(); } }) ;\n",
       "  });\n",
       "});\n",
       "} catch (e) {};\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from pynq.overlays.base import BaseOverlay\n",
    "from pynq_peripherals import ArduinoSEEEDGroveAdapter, PmodGroveAdapter\n",
    "base = BaseOverlay('base.bit')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Using Grove Light-Gesture-Color-Proximity sensor with Grove Base Shield V2.0 (Arduino)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-box alert-warning\"><ul>\n",
    "    <h4 class=\"alert-heading\">Make Physical Connections </h4>\n",
    "    <li>Insert the SEEED Grove Base Shield into the Arduino connector on the board. Connect the Grove Light-Gesture-Color-Proximity sensor module to one of the connectors labeled I2C.</li>\n",
    "</ul>\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Adapter configuration"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "adapter = ArduinoSEEEDGroveAdapter(base.ARDUINO, I2C='grove_lgcp')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Define device object"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "lgcp = adapter.I2C"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Proximity Operation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Enable the proximity functionality"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "lgcp.select_proximity()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Reading raw value of proximity"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Raw Value: 146\n"
     ]
    }
   ],
   "source": [
    "print(\"Raw Value: {:d}\".format(lgcp.get_proximity_raw()))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Detect proximity in interrupt way\n",
    "* In this example if the raw value of proximity less than 10 and more than 100, it will cause a interrupt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "lgcp.set_proximity_range(10, 100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "proximity detected\n",
      "Raw Value: 207\n",
      "proximity detected\n",
      "Raw Value: 66\n",
      "proximity detected\n",
      "Raw Value: 255\n",
      "proximity detected\n",
      "Raw Value: 255\n",
      "proximity detected\n",
      "Raw Value: 30\n",
      "proximity detected\n",
      "Raw Value: 14\n",
      "proximity detected\n",
      "Raw Value: 12\n",
      "proximity detected\n",
      "Raw Value: 7\n",
      "proximity detected\n",
      "Raw Value: 21\n",
      "proximity detected\n",
      "Raw Value: 31\n",
      "proximity detected\n",
      "Raw Value: 29\n",
      "proximity detected\n",
      "Raw Value: 8\n"
     ]
    }
   ],
   "source": [
    "from time import sleep\n",
    "for i in range(20):\n",
    "    raw=lgcp.get_proximity_raw()\n",
    "    if lgcp.is_proximity_detected() & (raw !=0):\n",
    "        print('proximity detected')\n",
    "        print(\"Raw Value: {:d}\".format(raw)) \n",
    "    lgcp.clear_proximity_interrupts()\n",
    "    sleep(1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## ALS(light) Operation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Enable the light and color functionality"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "lgcp.select_als()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Reading raw value and printing red, green, blue, clear channels "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "lgcp.set_adc_integration_time(100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Red: 19, Green: 19, Blue: 22, Clear: 59\n"
     ]
    }
   ],
   "source": [
    "lgcp.get_rgbc_raw()\n",
    "print(f\"Red: {lgcp.red()}, Green: {lgcp.green()}, Blue: {lgcp.blue()}, Clear: {lgcp.clear()}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Reading lux of light"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "23"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lgcp.get_lux()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Reading cct of light"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "10477"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lgcp.get_cct()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Gesture Operation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Enable the gesture functionality"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "lgcp.select_gesture()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "detecting\n",
      "North\n",
      "South\n",
      "West\n",
      "East\n"
     ]
    }
   ],
   "source": [
    "from time import sleep\n",
    "import os\n",
    "\n",
    "N_data = []\n",
    "S_data = []\n",
    "W_data = []\n",
    "E_data = []\n",
    "count = 0\n",
    "gesture = ['North', 'South', 'West', 'East']\n",
    "threshold = 1\n",
    "print('detecting')\n",
    "while(True):\n",
    "    try:\n",
    "        N = lgcp.get_gesture_north()\n",
    "        S = lgcp.get_gesture_south()\n",
    "        W = lgcp.get_gesture_west()\n",
    "        E = lgcp.get_gesture_east()\n",
    "        if (N>threshold and S>threshold and W>threshold and E>threshold):\n",
    "            N_data.append(N)\n",
    "            S_data.append(S)\n",
    "            W_data.append(W)\n",
    "            E_data.append(E)\n",
    "        else:\n",
    "            count += 1\n",
    "            if count >= 100:\n",
    "                if len(N_data) >= 10:\n",
    "                    N_gain = N_data[0] + N_data[1] + N_data[2]\n",
    "                    S_gain = S_data[0] + S_data[1] + S_data[2]\n",
    "                    W_gain = W_data[0] + W_data[1] + W_data[2]\n",
    "                    E_gain = E_data[0] + E_data[1] + E_data[2]\n",
    "                    gain_data = [N_gain, S_gain, W_gain, E_gain]\n",
    "                    index = gain_data.index(min(gain_data))\n",
    "                    print(gesture[index])\n",
    "                N_data = []\n",
    "                S_data = []\n",
    "                W_data = []\n",
    "                E_data = []\n",
    "                count = 0\n",
    "    except KeyboardInterrupt:\n",
    "        break"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Getting north raw value of gesture"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1\n"
     ]
    }
   ],
   "source": [
    "print(lgcp.get_gesture_north())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Getting south raw value of gesture"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "52"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lgcp.get_gesture_south()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Getting west raw value of gesture"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "64"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lgcp.get_gesture_west()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Getting east raw value of gesture"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "35"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lgcp.get_gesture_east()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "## Using Grove Light-Gesture-Color-Proximity sensor with PYNQ Grove Adapter (PMOD)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-box alert-warning\"><ul>\n",
    "    <h4 class=\"alert-heading\">Make Physical Connections </h4>\n",
    "    <li>Connect the PYNQ Grove Adapter to PMODB connector.  Connect the Grove Light-Gesture-Color-Proximity sensor module to the G3 connector of the Adapter.</li></ul>\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Adapter configuration"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "adapter = PmodGroveAdapter(base.PMODB, G3='grove_lgcp')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Define device object"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "lgcp = adapter.G3"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Proximity Operation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Enable the proximity functionality"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "lgcp.select_proximity()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Reading raw value of proximity"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Raw Value: 52\n"
     ]
    }
   ],
   "source": [
    "print(\"Raw Value: {:d}\".format(lgcp.get_proximity_raw()))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Detect proximity in interrupt way\n",
    "* In this example if the raw value of proximity less than 10 and more than 100, it will cause a interrupt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "lgcp.set_proximity_range(10, 100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "proximity detected\n",
      "Raw Value: 55\n",
      "proximity detected\n",
      "Raw Value: 90\n",
      "proximity detected\n",
      "Raw Value: 130\n",
      "proximity detected\n",
      "Raw Value: 129\n",
      "proximity detected\n",
      "Raw Value: 128\n",
      "proximity detected\n",
      "Raw Value: 253\n",
      "proximity detected\n",
      "Raw Value: 255\n",
      "proximity detected\n",
      "Raw Value: 93\n",
      "proximity detected\n",
      "Raw Value: 79\n",
      "proximity detected\n",
      "Raw Value: 95\n",
      "proximity detected\n",
      "Raw Value: 83\n",
      "proximity detected\n",
      "Raw Value: 82\n",
      "proximity detected\n",
      "Raw Value: 83\n",
      "proximity detected\n",
      "Raw Value: 85\n",
      "proximity detected\n",
      "Raw Value: 80\n",
      "proximity detected\n",
      "Raw Value: 84\n",
      "proximity detected\n",
      "Raw Value: 86\n",
      "proximity detected\n",
      "Raw Value: 89\n",
      "proximity detected\n",
      "Raw Value: 84\n",
      "proximity detected\n",
      "Raw Value: 96\n"
     ]
    }
   ],
   "source": [
    "from time import sleep\n",
    "for i in range(20):\n",
    "    raw=lgcp.get_proximity_raw()\n",
    "    if lgcp.is_proximity_detected() & (raw !=0):\n",
    "        print('proximity detected')\n",
    "        print(\"Raw Value: {:d}\".format(raw))\n",
    "    lgcp.clear_proximity_interrupts()\n",
    "    sleep(1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##  ALS(light) Operation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Enable the light and color functionality"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "lgcp.select_als()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Reading raw value and printing red, green, blue, clear channels "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "lgcp.set_adc_integration_time(100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Red: 34, Green: 31, Blue: 30, Clear: 78\n"
     ]
    }
   ],
   "source": [
    "lgcp.get_rgbc_raw()\n",
    "print(f\"Red: {lgcp.red()}, Green: {lgcp.green()}, Blue: {lgcp.blue()}, Clear: {lgcp.clear()}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Reading lux of light"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "32"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lgcp.get_lux()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Reading cct of light"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "37378"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lgcp.get_cct()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Gesture Operation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Enable the gesture functionality"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "lgcp.select_gesture()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "detecting\n",
      "South\n",
      "South\n",
      "North\n",
      "East\n",
      "West\n"
     ]
    }
   ],
   "source": [
    "from time import sleep\n",
    "import os\n",
    "\n",
    "N_data = []\n",
    "S_data = []\n",
    "W_data = []\n",
    "E_data = []\n",
    "count = 0\n",
    "gesture = ['North', 'South', 'West', 'East']\n",
    "threshold = 1\n",
    "print('detecting')\n",
    "while(True):\n",
    "    try:\n",
    "        N = lgcp.get_gesture_north()\n",
    "        S = lgcp.get_gesture_south()\n",
    "        W = lgcp.get_gesture_west()\n",
    "        E = lgcp.get_gesture_east()\n",
    "        if (N>threshold and S>threshold and W>threshold and E>threshold):\n",
    "            N_data.append(N)\n",
    "            S_data.append(S)\n",
    "            W_data.append(W)\n",
    "            E_data.append(E)\n",
    "        else:\n",
    "            count += 1\n",
    "            if count >= 100:\n",
    "                if len(N_data) >= 10:\n",
    "                    N_gain = N_data[0] + N_data[1] + N_data[2]\n",
    "                    S_gain = S_data[0] + S_data[1] + S_data[2]\n",
    "                    W_gain = W_data[0] + W_data[1] + W_data[2]\n",
    "                    E_gain = E_data[0] + E_data[1] + E_data[2]\n",
    "                    gain_data = [N_gain, S_gain, W_gain, E_gain]\n",
    "                    index = gain_data.index(min(gain_data))\n",
    "                    print(gesture[index])\n",
    "                N_data = []\n",
    "                S_data = []\n",
    "                W_data = []\n",
    "                E_data = []\n",
    "                count = 0\n",
    "    except KeyboardInterrupt:\n",
    "        break"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Getting north raw value of gesture"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lgcp.get_gesture_north()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Getting south raw value of gesture"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "255"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lgcp.get_gesture_south()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Getting west raw value of gesture"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "79"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lgcp.get_gesture_west()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Getting east raw value of gesture"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "161"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lgcp.get_gesture_east()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Copyright (C) 2021 Xilinx, Inc\n",
    "\n",
    "SPDX-License-Identifier: BSD-3-Clause"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "----"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "----"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
